package com.holiday.springboot2.task;

import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Component;

import java.util.concurrent.Future;

/**
 * 异步处理类
 *      1、自定义类，并添加注解@Component,添加注解 @Async表示这个类里面的所有方法都是异步的
 *      2、自定义方法，如果在方法上添加注解@Async表明该方法为异步
 *      3、获取异步处理的结果，相当于汇总
 *  *          1、自定义方法的返回类型是：Future<String>
 *             2、自定义方法中的返回值使用  new AsyncResult<>("task1")
 *             3、接收返回的结果：
 *                  1、使用自定义类调用对应的方法：asyncTask.task1();
 *                  2、判断任务是否执行完毕：task1.isDone()
 *                  3、通过死循环，获取方法执行的结果：String s1 = task1.get();在循环中需要break代码跳出
 */
@Component
@Async
public class AsyncTask {

    public Future<String> task1()throws Exception{
        Thread.sleep(5000);

        System.out.println("1");
        return new AsyncResult<>("task1");
    }

    public Future<String> task2()throws Exception{
        Thread.sleep(5000);
        System.out.println("2");
        return new AsyncResult<>("task2");
    }

    public void task3()throws Exception{
        Thread.sleep(5000);
        System.out.println("3");
    }


}
